定期ミートアップ 第59回
これ以降はMLIRの方が楽かも?
パーサコンビネータについて
Rustとパーサコンビネータってあんまり相性良くないのかな…(根拠なし、ただの感想です)
Haskell(などのGC言語)ならもっと快適なのかも、と書いてて感じた
chumsky
再帰するのにrecursiveを使う必要がある
.cloneを多用するわりに、書き方を間違うとパーサがCloneできなくなる(よくわかってない)
nom
デフォルトでは位置が取れない
nom_locateというcrateを組み合わせると取れるようになるが、本体の一部機能と食い合わせが悪かったりする(built-inでない故の悲しみ)
u8と&strに両対応しているかわりに、そこを間違うと長いエラーが出る
細かいところまで制御したかったら手書き再帰下降構文解析が最強(それはそう)
LALRとかのパーサジェネレータはどうなんでしょうね(気にはなるがそんなことしてる場合ではないのであった)
milika
ライフタイムのエラーが取れん、助けて
質問
block.append_operationが&mutでないのはなぜ?
a) そうすべき(気が向いたらやる)
b) その必要はない/そうしないほうがいい
c) それぞれにデメリットがありこちらを選択した
など
=> inkwellに倣ったが、問題があれば変えるかもとのこと
if let Some(v) = els { v } else { &[] }を変数に入れるとエラーになる
let tmp = if let Some(v) = els { v.as_slice() } else { &[] }; とするか、
let tmp = if let Some(v) = els.as_deref() { v } else { &[] };でいけるらしい
let tmp = if let Some(v) = els { v } else { &vec![]] }; はだめ(temporary valueのreferenceになるので)
やるとしたらlet tmp2 = vec![];